BOJ_1253_좋다

이분 탐색(Binary Search) 또는 투 포인터(Two-Pointers)로 풀이가 가능하다

package BJO;  
  
import java.io.BufferedReader;  
import java.io.IOException;  
import java.io.InputStreamReader;
import java.util.Arrays;  
import java.util.StringTokenizer;  
  
public class BJO_1253_좋다_풀이 {  
  
    /*  
    투 포인터로 간단하게 해결 할 수 있다  
     */    public static void main(String[] args) throws IOException {  
       BufferedReader br = new BufferedReader(new InputStreamReader(System.in));  
       int N = Integer.parseInt(br.readLine());  
       StringTokenizer st = new StringTokenizer(br.readLine());  
       int[] arr = new int[N];  
  
       for (int i = 0; i < N; i++) {  
          arr[i] = Integer.parseInt(st.nextToken());  
       }  
  
//     System.out.println(Arrays.toString(arr));  
       Arrays.sort(arr);  
  
       int cnt = 0;  
       for (int i = 0; i < N; i++) {  
          // 포인터를 2개 주기  
          int left = 0;  
          int right = N - 1;  
  
          int num = arr[i];  
  
          // 두 포인터가 만날 때까지  
          while (left < right) {  
             int sum = arr[left] + arr[right];  
             if (sum == num) {  
                // 포인터가 나를 찍었다면  
                if (left == i) {  
                   // 왼쪽 넘기기  
                   left++;  
                } else if (right == i) {  
                   // 오른쪽 넘기기  
                   right--;  
                } else {  
                   cnt++;  
                   break;  
                }  
             } else if (sum < num) {  
                left++;  
             } else {  
                right--;  
             }  
          }  
       }  
       System.out.println(cnt);  
    }  
}

#이분탐색 #투포인터